#!/bin/bash
source "sNmcli.sh"
# это цвет текста списка перед курсором при значении 0 в переменной  UNMARK(){ $e "\e[0m";}
 UNMARK(){ $e "\e[0m";}
 MARK(){ $e "\e[1;37m";}
#
 HEAD()
{
 for (( a=2; a<=28; a++ ))
  do
   TPUT $a 1
    $E "$na";
  done
   TPUT  1 1;$E "$nb";UNMARK;
   TPUT  2 2;$E "\e[1;36m CONNECTION MANAGEMENT COMMANDS\e[0m                \e[2m Команды управления подключением\e[0m";
   TPUT  3 1;$E "$nc";
   TPUT 13 1;$E "$nc";
   TPUT 15 2;$E "\e[2m Available options:\e[0m";
   TPUT 18 1;$E "$nc";
   TPUT 27 1;$E "$nd";
}
 FOOT(){ MARK;TPUT 29 1;$E "$ne";UNMARK;}
#
  M0(){ TPUT  4 3; $e "Kраткий обзор                                                      \e[32m Synopsis \e[0m";}
  M1(){ TPUT  5 3; $e "Описание                                                        \e[32m Description \e[0m";}
  M2(){ TPUT  6 3; $e "Перечислите профили подключения  \e[32m show [--active] [--order [+-]category:...] \e[0m";}
  M3(){ TPUT  7 3; $e "Показать подробности       \e[32m show [--active] [id | uuid | path | apath] ID... \e[0m";}
  M4(){ TPUT  8 3; $e "     \e[32m up [id | uuid | path] ID [ifname ifname] [ap BSSID] [passwd-file file] \e[0m";}
  M5(){ TPUT  9 3; $e "Деактивировать соединение с устройства   \e[32m down [id | uuid | path | apath] ID \e[0m";}
  M6(){ TPUT 10 3; $e "\e[32mmodify[--temporary][id uuid path]ID{option value[+|-]setting.property value} \e[0m";}
  M7(){ TPUT 11 3; $e "Удаляет параметр  \e[32m modify [--temporary] [id | uuid | path] ID remove setting \e[0m";}
  M8(){ TPUT 12 3; $e "Создайте новое соединение             \e[32m add [save {yes no}] {option value...} \e[0m";}
  M9(){ TPUT 14 3; $e "Отредактируйте соединение\e[32m edit{[id uuid path] ID [type type][con-name name]} \e[0m";}
 M10(){ TPUT 16 3; $e "Тип нового подключения                                                 \e[32m type \e[0m";}
 M11(){ TPUT 17 3; $e "Имя для нового соединения                                          \e[32m con-name \e[0m";}
 M12(){ TPUT 19 3; $e "Клонировать соединение   \e[32m clone [--temporary] [id | uuid | path] ID new_name \e[0m";}
 M13(){ TPUT 20 3; $e "Удалить настроенное соединение              \e[32m delete [id | uuid | path] ID... \e[0m";}
 M14(){ TPUT 21 3; $e "Мониторинг активности профиля подключения  \e[32m monitor [id | uuid | path] ID... \e[0m";}
 M15(){ TPUT 22 3; $e "Перезагрузите все файлы подключения с диска                          \e[32m reload \e[0m";}
 M16(){ TPUT 23 3; $e "Загрузить/перезагрузить один или несколько файлов с диска  \e[32m load filename... \e[0m";}
 M17(){ TPUT 24 3; $e "Импортируйте конфигурацию          \e[32m import [--temporary] type type file file \e[0m";}
 M18(){ TPUT 25 3; $e "Экспорт соединения                      \e[32m export [id | uuid | path] ID [file] \e[0m";}
 M19(){ TPUT 26 3; $e "Показать все настроенные соединения в многоканальном режиме       \e[32m multiline \e[0m";}
 M20(){ TPUT 28 3; $e "Exit                                                                         ";}
LM=20
   MENU(){ for each in $(seq 0 $LM);do M${each};done;}
    POS(){ if [[ $cur == up ]];then ((i--));fi
           if [[ $cur == dn ]];then ((i++));fi
           if [[ $i -lt 0   ]];then i=$LM;fi
           if [[ $i -gt $LM ]];then i=0;fi;}
REFRESH(){ after=$((i+1)); before=$((i-1))
           if [[ $before -lt 0  ]];then before=$LM;fi
           if [[ $after -gt $LM ]];then after=0;fi
           if [[ $j -lt $i      ]];then UNMARK;M$before;else UNMARK;M$after;fi
           if [[ $after -eq 0 ]] || [ $before -eq $LM ];then
           UNMARK; M$before; M$after;fi;j=$i;UNMARK;M$before;M$after;}
   INIT(){ R;HEAD;FOOT;MENU;}
     SC(){ REFRESH;MARK;$S;$b;cur=`ARROW`;}
# Функция возвращения в меню
     ES(){ MARK;$e " ENTER = main menu ";$b;read;INIT;};INIT
  while [[ "$O" != " " ]]; do case $i in
  0) S=M0;SC; if [[ $cur == enter ]];then R;echo -e "\e[32m
 nmcli connection
 {show|up|down|modify|add|edit|clone|delete|monitor|reload|load|import|export}
 [ARGUMENTS...]
\e[0m";ES;fi;;
  1) S=M1;SC; if [[ $cur == enter ]];then R;echo -e "
 NetworkManager хранит всю сетевую конфигурацию как «соединения», которые предста-
 вляют собой наборы данных (данные уровня 2, IP-адреса и т.д.), которые описывают,
 как создать сеть или подключиться к ней. Соединение является «активным», когда
 устройство использует конфигурацию этого соединения для создания или подключения
 к сети. Может быть несколько подключений, применимых к устройству, но только одно
 из них может быть активным на этом устройстве в любой момент времени. Дополни-
 тельные соединения могут использоваться для быстрого переключения между различны-
 ми сетями и конфигурациями.
 Рассмотрим машину, которая обычно подключена к сети с включенным DHCP, но иногда
 подключается к тестовой сети, использующей статическую IP-адресацию.
 Вместо ручной перенастройки eth0 каждый раз при изменении сети настройки можно
 сохранить в виде двух подключений, которые оба применяются к eth0, одно для DHCP
 (называемое по умолчанию) и одно с деталями статической адресации (называемое
 тестированием).
 При подключении к сети с включенным DHCP пользователь запустит:
\e[32m nmcli con up default\e[0m
 а при подключении к статической сети пользователь запустит тестирование:
\e[32m nmcli con up\e[0m
";ES;fi;;
  2) S=M2;SC; if [[ $cur == enter ]];then R;echo -e "
 Перечислите профили подключения в памяти и на диске, некоторые из которых также
 могут быть активны, если устройство использует этот профиль подключения.
 Без параметра отображаются все профили:\e[32m nmcli connection show\e[0m
 --active Если указан параметр, отображаются только активные профили.
 --order Параметр можно использовать для получения пользовательского порядка
 соединений.
 Соединения можно упорядочить по:
 активному статусу (active):

 имени (name):              \e[32m nmcli -f name,autoconnect c s\e[0m
 Покажет все имена профилей подключения, их свойство автоматического подключения.

 типу (type:

 пути D-Bus (path):
 Если соединения равны по категории порядка сортировки, можно указать
 дополнительную категорию.
 Порядок сортировки по умолчанию эквивалентен --order active:name:path. +
 или отсутствие префикса означает сортировку по возрастанию
 (по алфавиту или по цифрам), - означает обратный (по убыванию) порядок.
 Имена категорий можно сокращать (например, --order -a:na).
";ES;fi;;
  3) S=M3;SC; if [[ $cur == enter ]];then R;echo -e "
 Узнать название интерфейса:\e[32m nmcli connection\e[0m или\e[32m nmcli con\e[0m

 Показать подробности для указанных подключений. По умолчанию отображаются как
 статическая конфигурация, так и данные активного подключения.

 --active Когда указана опция, учитываются только активные профили:
\e[32m nmcli connection show --active\e[0m

 --show-secrets Используйте глобальную опцию для отображения секретов,
 связанных с профилем.
 Ключевые слова id, uuid, path и apath можно использовать,
 если идентификатор неоднозначен.

 Необязательные ключевые слова, определяющие идентификатор:
\e[32m id   \e[0m ID обозначает имя соединения.
\e[32m uuid \e[0m ID обозначает UUID соединения.
\e[32m path \e[0m ID обозначает путь статического соединения D-Bus в формате:
      \e[36m /org/freedesktop/NetworkManager/Settings/num\e[0m
       или просто num.
\e[32m apath\e[0m ID обозначает путь активного соединения D-Bus в формате:
      \e[36m /org/freedesktop/NetworkManager/ActiveConnection/num\e[0m
       или просто num.

 --fields Вывод можно отфильтровать с помощью глобальной опции.
 Используйте следующие значения:
\e[32m profile\e[0m показывает только статическую конфигурацию профиля.
\e[32m active \e[0m показывает только данные об активном соединении (когда профиль активен).

 Вы также можете указать определенные поля.
 Для статической конфигурации используйте имена настроек и свойств,
 как описано на справочной странице nm-settings-nmcli.
 Для активных данных используйте GENERAL, IP4, DHCP4, IP6, DHCP6, VPN.
 Когда для соединения nmcli не задана команда, по умолчанию используется действие:
\e[32m nmcli connection show\e[0m или\e[32m nmcli con show\e[0m или\e[32m nmcli c s\e[0m
 Показать одно подключение:\e[32m nmcli connection show \"имя_соединения\"\e[0m
";ES;fi;;
  4) S=M4;SC; if [[ $cur == enter ]];then R;echo -e "
 Чтобы подключиться к другому сохраненному соединению, просто передать опцию up в
 команде nmcli. Убедитесь, что вы указали SSID или UUID новой сети, к которой
 хотите подключиться. Активируйте соединение:\e[32m nmcli con up ssid/uuid\e[0m

 Соединение идентифицируется по его имени, UUID или пути D-Bus.
 Если идентификатор неоднозначен, можно использовать идентификатор ключевого слова
 UUID или путь.
 Когда требуется, чтобы конкретное устройство активировало соединение,
 следует указать параметр ifname с именем интерфейса.
 Если идентификатор не указан, требуется ifname, и NetworkManager активирует наи-
 лучшее доступное соединение для данного ifname. В случае VPN-подключения пара-
 метр ifname указывает устройство базового подключения. Параметр ap указывает,
 какую конкретную точку доступа следует использовать в случае подключения к Wi-Fi
 Если параметр --wait не указан, время ожидания по умолчанию будет равно:
 90 секундам. См. соединение, показанное выше, для описания ключевых слов,
 определяющих идентификатор.

 Доступные варианты:
\e[32m ifname     \e[0m интерфейс, который будет использоваться для активации:

\e[32m nmcli c a ifname Maxipes-fik type vlan dev eth0 id 55\e[0m
 В неинтерактивном режиме добавляет соединение VLAN с идентификатором 55.
 Соединение будет использовать eth0, а интерфейс VLAN будет называться Maxipes-fik.

\e[32m nmcli c a ifname eth0 type ethernet ipv4.method disabled ipv6.method link-local\e[0m
 В неинтерактивном режиме добавляет соединение, которое будет использовать
 интерфейс Ethernet eth0 и имеет настроенный только локальный адрес канала IPv6.

\e[32m     ap     \e[0m BSSID точки доступа, к которой должна подключиться команда
             (для соединений Wi-Fi).
\e[32m passwd-file\e[0m некоторые сети могут потребовать учетные данные во время активации.
             Вы можете предоставить эти учетные данные, используя эту опцию.
             Каждая строка файла должна содержать один пароль в виде:
            \e[32m setting_name.property_name:the password\e[0m

             Например, для WPA Wi-Fi с PSK строка будет выглядеть так:
            \e[32m 802-11-wireless-security.psk:secret12345\e[0m

             Для пароля 802.1X строка будет:
            \e[32m 802-1x.password:my 1X password\e[0m

 nmcli также принимает строки wifi-sec и wifi вместо 802-11-wireless-security.
 Когда NetworkManager запрашивает пароль, а он не указан, nmcli запросит его при
 запуске с параметром --ask. Если --ask не был передан. NetworkManager может
 запросить другой секретный агент, который может быть запущен (обычно это
 секретный агент с графическим интерфейсом, такой как nm-applet или gnome-shell).

 Oбновить настройки:\e[32m nmcli connection up static\e[0m

 Поднять интерфейс:\e[32m nmcli con up имя_интерфейса\e[0m
";ES;fi;;
  5) S=M5;SC; if [[ $cur == enter ]];then R;echo -e "
 Oтключить интерфейс:\e[32m nmcli con down имя_интерфейса\e[0m

 При подключении к одной сети, но надо использовать другое соединение, Можно
 отключиться, переключив соединение на «no». Нужно будет указать SSID или,
 если несколько подключений с одним и тем же SSID, используйте UUID:
\e[32m nmcli con down ssid/uuid\e[0m

 Деактивировать соединение с устройства, не препятствуя дальнейшей автоматической
 активации устройства. Команде можно передать несколько соединений. Имейте в виду,
 что эта команда деактивирует указанное активное подключение, но устройство, на
 котором подключение было активным, по-прежнему готово к подключению и выполнит
 автоматическую активацию путем поиска подходящего подключения с установленным
 флагом «автоподключение». Обратите внимание, что деактивирующий профиль
 подключения внутренне заблокирован от повторного автоматического подключения.
 Следовательно, он не будет автоматически подключаться до перезагрузки или
 до тех пор, пока пользователь не выполнит действие, которое разблокирует
 автоматическое подключение, например, изменит профиль или явно активирует его.
 В большинстве случаев вместо этого вы можете использовать команду отключения
 устройства. Соединение идентифицируется по его имени, UUID или пути D-Bus.
 Если идентификатор неоднозначен, можно использовать идентификатор ключевого слова:
 id, uuid, path or apath
 См. соединение, показанное выше, для описания ключевых слов, определяющих
 идентификатор.
 Если параметр --wait не указан, время ожидания по умолчанию будет 10 секунд.
";ES;fi;;
  6) S=M6;SC; if [[ $cur == enter ]];then R;echo -e "
 Добавляйте, изменяйте или удаляйте свойства в профиле соединения. Чтобы установить
 свойство, просто укажите имя свойства, за которым следует значение.
 Пустое значение (\"\") сбрасывает значение свойства до значения по умолчанию.
 См. nm-settings-nmcli для полной информации об именах настроек и свойств, их
 описаниях и значениях по умолчанию. Настройка и свойство могут быть сокращены,
 если они уникальны.
 Если вы хотите добавить элемент или флаг к существующему значению, используйте
 префикс + для имени свойства или псевдонима. Если вы хотите удалить элементы из
 свойство типа контейнера или флага, используйте - префикс.
 Для определенных свойств вы также можете удалить элементы, указав индекс(ы),
 начинающийся с нуля. + и - модификаторы имеют реальный эффект только для тех
 свойств, которые их поддерживают. Это, например, многозначные (контейнерные)
 свойства или флаги, такие как ipv4.dns, ip4, ipv4.addresses, bond.options, флаги
 802-1x.phase1-auth и т. д.
 Соединение идентифицируется по его имени, UUID или пути D-Bus. Если идентификатор
 неоднозначен, можно использовать идентификатор ключевого слова UUID или путь.
";ES;fi;;
  7) S=M7;SC; if [[ $cur == enter ]];then R;echo -e "
 Удаляет параметр из профиля подключения.

 Изменяет свойство «autoconnect» в настройке «connection» соединения «ethernet-2»:
\e[32m nmcli con mod ethernet-2 connection.autoconnect no\e[0m

 Изменяет свойство «mtu» в настройке «wifi» подключения «Домашний Wi-Fi»:
\e[32m nmcli con mod \"Home Wi-Fi\" wifi.mtu 1350\e[0m

 Устанавливает ручную адресацию и адреса в профиле em1-1:
\e[32m nmcli con mod em1-1 ipv4.method manual ipv4.addr \"192.168.1.23/24 192.168.1.1, 10.10.1.5/8, 10.0.0.11\"\e[0m

 Добавляет общедоступный DNS-сервер Google к DNS-серверам в профиле ABC:
\e[32m nmcli con modify ABC +ipv4.dns 8.8.8.8\e[0m

 Удаляет указанный IP-адрес из (статического) профиля ABC:
\e[32m nmcli con modify ABC -ipv4.addresses \"192.168.100.25/24 192.168.1.1\"\e[0m
";ES;fi;;
  8) S=M8;SC; if [[ $cur == enter ]];then R;./lNmcliConnection.sh;ES;fi;;
  9) S=M9;SC; if [[ $cur == enter ]];then R;echo -e "
 Отредактируйте существующее соединение или добавьте новое с помощью интерактивного
 редактора. Существующее соединение идентифицируется по его имени, UUID или пути
 D-Bus. Если идентификатор неоднозначен, можно использовать идентификатор ключевого
 слова UUID или путь. См. соединение, показанное выше, для описания ключевых слов,
 определяющих идентификатор. Отсутствие идентификатора означает, что будет
 добавлено новое соединение. Интерактивный редактор проведет вас через
 редактирование соединения и позволит вам изменить параметры соединения в
 соответствии с вашими потребностями с помощью простого интерфейса на основе меню.
 Редактор показывает, какие настройки и свойства можно изменить, и предоставляет
 встроенную справку.
 См. также nm-settings-nmcli для всех настроек и свойств NetworkManager,
 а также их описания; и nmcli-examples для сеансов редактора примеров.

 Редактирует существующее соединение «ethernet-em1-2» в интерактивном редакторе:
\e[32m nmcli connection edit ethernet-em1-2\e[0m
";ES;fi;;
 10) S=M10;SC;if [[ $cur == enter ]];then R;echo -e "
\e[32m type\e[0m тип нового подключения.
 Допустимые типы такие же, как и для команды добавления соединения.

 В неинтерактивном режиме добавляет соединение Ethernet:
\e[32m nmcli connection add type ethernet autoconnect no ifname eth0\e[0m
 привязанное к интерфейсу eth0, с автоматической настройкой IP (DHCP)
 и отключает флаг автоматического подключения соединения.

 Добавляет новое соединение Ethernet в интерактивный редактор:
\e[32m nmcli connection edit type ethernet con-name \"yet another Ethernet connection\"\e[0m
";ES;fi;;
 11) S=M11;SC;if [[ $cur == enter ]];then R;echo -e "
\e[32m con-name\e[0m имя для нового соединения. Его можно изменить позже в редакторе.
";ES;fi;;
 12) S=M12;SC;if [[ $cur == enter ]];then R;echo -e "
 Клонировать соединение. Клонируемое соединение идентифицируется по имени, UUID
 или пути D-Bus. Если идентификатор неоднозначен, можно использовать идентификатор
 ключевого слова, UUID или путь. См. соединение, показанное выше, для описания
 ключевых слов, определяющих идентификатор. new_name — это имя нового клонирован-
 ного соединения. Новое соединение будет точной копией, за исключением свойств
 connection.id (new_name) и connection.uuid (generated).
 Новый профиль подключения будет сохранен как постоянный, если не указан
 параметр --temporary, в этом случае новый профиль не будет существовать после
 перезапуска NetworkManager.
";ES;fi;;
 13) S=M13;SC;if [[ $cur == enter ]];then R;echo -e "
 Удалить настроенное соединение. Соединение, которое нужно удалить,
 идентифицируется по его имени, UUID или пути D-Bus. Если идентификатор
 неоднозначен, можно использовать идентификатор ключевого слова, UUID или путь.
 См. соединение, показанное выше, для описания ключевых слов, определяющих
 идентификатор.
 Если параметр --wait не указан, время ожидания по умолчанию равно 10 секундам.
";ES;fi;;
 14) S=M14;SC;if [[ $cur == enter ]];then R;echo -e "
 Мониторинг активности профиля подключения.
 Эта команда печатает строку всякий раз, когда изменяется указанное соединение.
 Отслеживаемое соединение идентифицируется по имени, UUID или пути D-Bus.
 Если идентификатор неоднозначен, можно использовать идентификатор ключевого
 слова, UUID или путь. См. соединение, показанное выше, для описания ключевых
 слов, определяющих идентификатор. Отслеживает все профили подключения, если ни
 один из них не указан. Команда завершается, когда исчезают все отслеживаемые
 соединения. Если вы хотите отслеживать создание соединения, рассмотрите
 возможность использования глобального монитора с командой монитора nmcli.
";ES;fi;;
 15) S=M15;SC;if [[ $cur == enter ]];then R;echo -e "
 Перезагрузите все файлы подключения с диска. NetworkManager не отслеживает
 изменения в соединении. Поэтому вам нужно использовать эту команду, чтобы указать
 NetworkManager перечитать профили подключения с диска, когда в них были внесены
 изменения.
";ES;fi;;
 16) S=M16;SC;if [[ $cur == enter ]];then R;echo -e "
 Загрузить/перезагрузить один или несколько файлов подключения с диска.
 Используйте это после ручного редактирования файла подключения,
 чтобы убедиться, что NetworkManager знает о его последнем состоянии.
";ES;fi;;
 17) S=M17;SC;if [[ $cur == enter ]];then R;echo -e "
 Импортируйте external/foreign внешний/несоответствующий конфигурацию в качестве
 профиля подключения NetworkManager. Тип входного файла определяется параметром
 type. На данный момент поддерживаются только конфигурации VPN. Конфигурация
 импортируется подключаемыми модулями NetworkManager VPN значения типа такие же,
 как для параметра типа vpn в добавлении соединения nmcli. Конфигурации VPN
 импортируются подключаемыми модулями VPN. Поэтому необходимо установить
 соответствующий плагин VPN, чтобы nmcli мог импортировать данные.
 Импортированный профиль подключения будет сохранен как постоянный, если не указан
 параметр --temporary, в этом случае новый профиль не будет существовать после
 перепуска NetworkManager.

 Импортирует конфигурацию OpenVPN в NetworkManager:
\e[32m nmcli con import type openvpn file ~/Downloads/frootvpn.ovpn\e[0m
";ES;fi;;
 18) S=M18;SC;if [[ $cur == enter ]];then R;echo -e "
 На данный момент поддерживаются только VPN-подключения. Должен быть установлен
 правильный плагин VPN, чтобы nmcli мог экспортировать соединение. Если файл не
 предоставлен, данные конфигурации VPN будут распечатаны на стандартный вывод.

 Экспортирует VPN-профиль NetworkManager corp-vpnc
 как стандартную конфигурацию Cisco (vpnc):
\e[32m nmcli con export corp-vpnc /home/joe/corpvpn.conf\e[0m
";ES;fi;;
 19) S=M19;SC;if [[ $cur == enter ]];then R;echo -e "\e[32m
 nmcli -p -m multiline -f all con show
\e[0m";ES;fi;;
 20) S=M20;SC;if [[ $cur == enter ]];then R;exit 0;fi;;
 esac;POS;done
